package com.tosee.utils;

import java.util.Locale;

import javax.annotation.Resource;

import org.springframework.context.ApplicationContext;

/**
 * Permet la gestion des ressources.
 * 
 * @author robint
 */
public class MessageHandler {

    /**
     * Le context de l'application.
     */
    @Resource
    private ApplicationContext context;

    /**
     * Localité par défaut
     */
    private Locale defaultLocale;

    /**
     * Instance privée (singleton)
     */
    private static MessageHandler instance;

    /**
     * Constructeur par défaut
     */
    public MessageHandler() {
        super();
    }

    /**
     * Méthode de récupération de l'instance du gestionnaire de messages.
     * 
     * @return L'instance.
     */
    public static MessageHandler getInstance() {
        if(instance == null) {
            instance = new MessageHandler();
        }
        return instance;
    }

    /**
     * Retourne le message associé à la clé et aux paramètres.
     * 
     * @param _cleMessage la clé du message.
     * @param locale Le contexte géographique et linguistique de récupération du message.
     * @param _messageParams Les paramètres du message.
     * @return Le message.
     */
    public String getMessage(String _cleMessage, Locale locale, Object... _messageParams) {
        return context.getMessage(_cleMessage, _messageParams, locale);
    }

    /**
     * Retourne le message associé à la clé et aux paramètres.
     * 
     * @param _cleMessage la clé du message.
     * @param _messageParams Les paramètres du message.
     * @return Le message.
     */
    public String getMessage(String _cleMessage, Object... _messageParams) {
        return context.getMessage(_cleMessage, _messageParams, defaultLocale);
    }

    /**
     * Retourne le message associé à la clé.
     * 
     * @param _cleMessage la clé du message.
     * @return Le message.
     */
    public String getMessage(String _cleMessage) {
        return context.getMessage(_cleMessage, null, defaultLocale);
    }

    /**
     * Retourne le message au format entier.
     * 
     * @param _cleMessage la clé du message.
     * @return Le message.
     */
    public Integer getIntegerMessage(String _cleMessage) {
        return Integer.parseInt(context.getMessage(_cleMessage, null, defaultLocale));
    }

    /**
     * @return the context
     */
    public ApplicationContext getContext() {
        return context;
    }

    /**
     * @param context the context to set
     */
    public void setContext(ApplicationContext context) {
        this.context = context;
    }

    /**
     * @return the defaultLocale
     */
    public Locale getDefaultLocale() {
        return defaultLocale;
    }

    /**
     * @param defaultLocale the defaultLocale to set
     */
    public void setDefaultLocale(Locale defaultLocale) {
        this.defaultLocale = defaultLocale;
    }

}
